package com.demo.designmode.reponseibility.case2;

import java.util.ArrayList;
import java.util.List;

public class FilterChain {
    //使用List装过滤器，List是有序的
    private List<Filter> filters = new ArrayList<>();
    //过滤器的下标，从0开始，每次调用preHandleRequest方法就+1
    private int index = 0;

    //添加过滤器
    public void addFilter(Filter filter) {
        filters.add(filter);
    }

    //调用过滤器的doFilter()方法，并把指针+1指向下一个过滤器
    public String preHandleRequest(String data) {
        //如果指针大于集合的size，则return，不再往下调用，相当于递归的终结条件
        if (index == filters.size()) {
            return data;
        }
        Filter filter = filters.get(index);
        //下标指针+1
        index++;
        //精髓在这个this，把自己再当做参数传进去，实现了递归
        return filter.doFilter(data, this);
    }
}